/*
 * 文件名：UserInfoTransactionImp.java
 * 版权：Copyright by www.wootide.com
 * 描述：
 * 修改人：ozm
 * 修改时间：2013-1-30
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */
package com.wootide.ets.sys.user.transaction.imp;

import org.springframework.beans.BeanUtils;

import com.wootide.ets.common.ETSRuntimeException;
import com.wootide.ets.common.ErrorCodes;
import com.wootide.ets.common.Page;
import com.wootide.ets.common.QueryCondition;
import com.wootide.ets.common.QueryResults;
import com.wootide.ets.common.dao.CommonDao;
import com.wootide.ets.common.util.CommonUtil;
import com.wootide.ets.log.syslog.RunLog;
import com.wootide.ets.sys.user.dao.UserInfoDao;
import com.wootide.ets.sys.user.pojo.UserInfo;
import com.wootide.ets.sys.user.transaction.UserInfoTransaction;

/**
 * 用户事务实现层
 * 〈功能详细描述〉
 * @author ozm
 * @version 2013-1-30
 * @see UserInfoTransactionImp
 * @since 2013-1-30上午9:44:19
 */
public class UserInfoTransactionImp implements UserInfoTransaction
{
   

    /**
     * 注入运行日志
     */
    private RunLog runLog;
    
    /**
     * 公共数据访问层实例
     */
    private CommonDao commonDao;
    
    /**
     * 用户数据访问层实例
     */
    private UserInfoDao userInfoDao;
    
    
    public UserInfo viewOneUser(UserInfo userInfo)
    {
        // 打印方法入口参数
        runLog.debug("userInfo=" + userInfo);
        return userInfoDao.findOneUserByNameAndPassword(userInfo.getUserName(), userInfo.getPassword());
    }

    /**
     * 
     * Description: 分页查询
     * Implement: <br>
     * @param page 分页参数
     * @param queryConditon 查询条件
     * @see
     * @return Result 结果对象
     * @author ozm2013-1-29下午1:23:32
     */
    public QueryResults queryForPages(Page page, QueryCondition queryConditon)
    {
        
        // 打印方法入口参数
        runLog.debug("page=" + page);
        runLog.debug("queryConditon=" + queryConditon);
        QueryResults queryResults = commonDao.queryForPages(page, queryConditon);
        return queryResults;
    }
    
    /**
     * 
     * Description: 添加一个用户
     * Implement: <br>
     * @param user 要添加的用户
     * @see
     * @author ozm2013-1-29下午1:26:06
     */
    public void addOneUser(UserInfo userInfo)
    {
        // 打印方法入口参数
        runLog.debug("userInfo=" + userInfo);
        // 根据用户名检查唯一性
        Integer num = userInfoDao.findNumByUserName(userInfo.getUserName());
        //用户记录已经存在
        if (num > 0)
        {
            throw new ETSRuntimeException("User Existed!",
                    ErrorCodes.Sys.User.USEREXIST);
        }
        
        commonDao.addOneObject(userInfo);
        
    }
    
    /**
     * 
     * Description: 修改一个用户信息
     * Implement: <br>
     * @param user 要修点的用户信息
     * @see
     * @return UserInfo 修改的用户对象
     * @author ozm2013-1-29下午1:27:37
     */
    public UserInfo modOneUser(UserInfo userInfo)
    {
        // 打印方法入口参数
        runLog.debug("userInfo=" + userInfo);
        UserInfo oldUserInfo = userInfoDao.findOneUserByUserId(userInfo.getUserId());
        
        //判断要修改的记录是否存在
        if (null == oldUserInfo)
        {
            throw new ETSRuntimeException("User not Exist!",
                    ErrorCodes.Sys.User.USERNOTEXIST);
        }
        
        //获取原始数据副本
        UserInfo oldUserInfoCopy = new UserInfo();
        BeanUtils.copyProperties(oldUserInfo, oldUserInfoCopy);
        
        //修改用户信息
        
        oldUserInfo.setUserName(userInfo.getUserName());
        oldUserInfo.setRoleInfo(userInfo.getRoleInfo());
        oldUserInfo.setStatus(userInfo.getStatus());
        oldUserInfo.setUserDesc(userInfo.getUserDesc());
        oldUserInfo.setUpdateTime(CommonUtil.getCurrentTime());
        return oldUserInfoCopy;
    }
    
    /**
     * 
     * Description: 删除用户
     * Implement: <br>
     * @param innerIndex 要删除的用户id
     * @return
     * @see
     * @return UserInfo 要删除的用户信息
     * @author ozm2013-1-29下午4:17:56
     */
    public UserInfo delOneUser(Integer innerIndex)
    {
        UserInfo oldUserInfo = userInfoDao.findOneUserByUserId(innerIndex);
        //判断要删除的记录是否存在
        if (null == oldUserInfo)
        {
            throw new ETSRuntimeException("User not Exist!",
                    ErrorCodes.Sys.User.USERNOTEXIST);
        }
        
        commonDao.delOneObject(oldUserInfo);
        //        BeanUtils.copyProperties(oldUserInfo, oldUserInfoCopy);
        return oldUserInfo;
    }
    
    /**
     * 
     * Description: 通过索引获取用户对象
     * Implement: <br>
     * @param innerIndex 指定的用户userId 
     * @see
     * @return UserInfo 要查询的用户信息
     * @author ozm2013-1-29下午3:55:17
     */
    public UserInfo viewOneUser(Integer innerIndex)
    {
        // 打印方法入口参数
        runLog.debug("innerIndex=" + innerIndex);
        UserInfo userInfo = userInfoDao.findOneUserByUserId(innerIndex);
        return userInfo;
    }
    
    public RunLog getRunLog()
    {
        return runLog;
    }

    public void setRunLog(RunLog runLog)
    {
        this.runLog = runLog;
    }

    public CommonDao getCommonDao()
    {
        return commonDao;
    }

    public void setCommonDao(CommonDao commonDao)
    {
        this.commonDao = commonDao;
    }

    public UserInfoDao getUserInfoDao()
    {
        return userInfoDao;
    }

    public void setUserInfoDao(UserInfoDao userInfoDao)
    {
        this.userInfoDao = userInfoDao;
    }
    
}
